/**
 * **************************************************************
 * Nombre: DAOHistoricoAsignaturaProfesor.java 
 * Versión: 1.0.0 
 * Autor: Alberto de Jesús Castro Becerra	
 * Creado: 6-abril-2013 
 * Modificado: 
 * Diagrama: GAPI v4.7.1
 * Caso de uso: MPE1
 * ***************************************************************
 */
package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.Asignatura;
import Dominio.HistoricoAsignaturaProfesor;
import Dominio.Profesor;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Controlador de base de datos del historico de asignaturas - profesores.
 * @author Alonso
 */
public class DAOHistoricoAsignaturaProfesor {

    private final String TABLA_HISTORICO = "historico_profesores_asignatura";
    private final String COLUMNA_CLAVE_PROFESOR = "cveProfesor";
    private final String COLUMNA_CLAVE_ASIGNATURA = "cveAsignatura";
    private AccesoBaseDatos acceso;
    private Connection conexion;
    /**
     * Constructor que inicializa la conexion a la base de datos.
     */
    public DAOHistoricoAsignaturaProfesor() {
        acceso = new AccesoBaseDatos();
        conexion = acceso.abrirConexion();
    }
/**
 * Cerrar la conexion a la base de datos.
 */
    public void cerrarConexion() {
        acceso.cerrarConexion(conexion);
    }
    /**
     * Verifica si existe el par de asignatura y profesor.
     * @param claveAsignatura Clave de la asignatura
     * @param claveProfesor Clave del profesor.
     * @return Verdadero o falso si existe o no el par asignatura y profesor.
     */
    public boolean existeElParAsignaturaProfesor(int claveAsignatura, int claveProfesor) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryBusqueda = "SELECT * FROM " + TABLA_HISTORICO + " WHERE "
                +COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"' AND "
                +COLUMNA_CLAVE_ASIGNATURA+" = '"+claveAsignatura+"';";            
            ResultSet resultadoBusqueda = sentencia.executeQuery(queryBusqueda);
            
            int contadorRegistros = 0;
            while(resultadoBusqueda.next()) {
                contadorRegistros++;
            }
            
            if(contadorRegistros != 0) {
                return true;
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(DAOHistoricoAsignaturaProfesor.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error al tartar de verificar la existencia del par asignatura profesor");
        }
        return false;
    }
    /**
     * Registrar una asignatura y al profesor de la asignatura.
     * @param claveAsignatura Clave de la asignatura
     * @param claveProfesor Clave del profesor
     */
    public void registrarParesAsignaturaProfesor(int claveAsignatura, int claveProfesor) {       
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryInsercion = "INSERT INTO " + TABLA_HISTORICO + "( "
                    +COLUMNA_CLAVE_PROFESOR+", "+COLUMNA_CLAVE_ASIGNATURA+") VALUES ('"
                    +claveProfesor+"', '"+claveAsignatura+"');";
            sentencia.executeUpdate(queryInsercion);
        } catch (SQLException ex) {
            Logger.getLogger(DAOHistoricoAsignaturaProfesor.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error al tartar de registrar par asignatura-profesor");
        }
    }
    /**
     * Busca todos los historicos de las asignaturas junto con el profesor.
     * @return El arreglo con los historicos.
     */
    public ArrayList<HistoricoAsignaturaProfesor> buscarTodosLosParesAsignaturaProfesor() {
        ArrayList<HistoricoAsignaturaProfesor> listaDeHistoricoDeAsignaturasProfesores = new ArrayList<HistoricoAsignaturaProfesor>();
        
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String querySearch = "SELECT * FROM " + TABLA_HISTORICO + ";";
            ResultSet resultadoBusqueda = sentencia.executeQuery(querySearch);
            
            while(resultadoBusqueda.next()) {
                int claveProfesor = resultadoBusqueda.getInt(1);
                int claveAsignatura = resultadoBusqueda.getInt(2);
                
                DAOProfesor daoProfesor = new DAOProfesor();
                Profesor profesor = daoProfesor.buscarProfesor(claveProfesor);
                daoProfesor.cerrarConexionAProfesor();
                
                DAOAsignatura daoAsignatura = new DAOAsignatura();
                Asignatura asignatura = daoAsignatura.buscarAsignatura(claveAsignatura);
                daoAsignatura.cerrarConexionAAsignatura();
                
                HistoricoAsignaturaProfesor historicoAsignaturaProfesor = new HistoricoAsignaturaProfesor();
                historicoAsignaturaProfesor.setProfesor(profesor);
                historicoAsignaturaProfesor.setAsignatura(asignatura);  
                
                listaDeHistoricoDeAsignaturasProfesores.add(historicoAsignaturaProfesor);
            }
    
        }
        catch (SQLException ex) {
            Logger.getLogger(DAOHistoricoAsignaturaProfesor.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return listaDeHistoricoDeAsignaturasProfesores;
    }
/**
 * Verifica que existe el profesor en el historico academico
 * @param claveProfesor Clave del profesor
 * @return True si existe, false en caso contrario.
 */    
    public boolean existeElProfesorEnElHistorico(int claveProfesor) {
        try {        
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryBusqueda = "SELECT * FROM " + TABLA_HISTORICO + " WHERE "
                +COLUMNA_CLAVE_PROFESOR+" = '"+claveProfesor+"';";            
            ResultSet resultadoBusqueda = sentencia.executeQuery(queryBusqueda);
            
            int contadorRegistros = 0;
            while(resultadoBusqueda.next()) {
                contadorRegistros++;
            }
            
            if(contadorRegistros != 0) {
                return true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DAOHistoricoAsignaturaProfesor.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
}